package org.practice.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * InitParamListener用来监听Servlet容器的上下文环境,并读取初始化参数
 * (这里ServletContext就是tomcat容器,ApplicationContext相当于Spring Ioc容器)
 * Tomcat Servlet元素加载顺序：Context-Param--->Listener-->Filter-->Servlet
 */
public class InitParamListener implements ServletContextListener{
	private java.util.Timer timer = null;
	
	@Override
	public void contextInitialized(ServletContextEvent event) {
		//web.xml里配置param key
		event.getServletContext().getInitParameter("SchedulingTime");
		//将任务添加到定时器调度表,延时五秒，每分钟(10000ms)调用一次
		timer.schedule(new MyTask(), System.currentTimeMillis()+5000, 10000);
		event.getServletContext().log("已经将任务添加到定时器调度表");

	}
	
	@Override
	public void contextDestroyed(ServletContextEvent event) {
		timer.cancel();
		event.getServletContext().log("定时器销毁");
	}
	
	/**
	 * 静态内部类(与外部类寄居关系)，jdk提供的一个单线程定时任务,相当于Spring的DetailJob
	 * 成员内部类(非静态内部类,与外部类寄生关系,编译器会自动给成员内部类构造方法里加上一个指向外部类对象的引用，所以实例化成员内部类得先实例化它的外部类)
	 */
	static class MyTask extends java.util.TimerTask {
		@Override
		public void run() {
			System.out.println("do something.....");
		}
	}
	
}
